package com.onesports.intelligent.k12.polarlight.service.course.manage;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.onesports.intelligent.k12.polarlight.common.errors.exceptions.BusinessException;
import com.onesports.intelligent.k12.polarlight.domain.dto.course.CourseSubLevelSaveOrUpdateDTO;
import com.onesports.intelligent.k12.polarlight.domain.entity.course.CourseSubLevel;
import com.onesports.intelligent.k12.polarlight.mapper.course.CourseSubLevelMapper;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author FPH
 * @since 2022年7月8日14:21:55
 * 课程分阶
 */
@Service
@RequiredArgsConstructor
public class CourseSubLevelService extends ServiceImpl<CourseSubLevelMapper, CourseSubLevel> {
    private final CourseSubLevelMapper mapper;
    /**
     * 校验名称是否重复
     * @param name
     * @return
     */
    public Boolean checkName(String name,String id,String classify_id){
        List<CourseSubLevel> list=list(new LambdaQueryWrapper<CourseSubLevel>()
                .eq(CourseSubLevel::getSubLevelName, name)
                .eq(CourseSubLevel::getClassifyId,classify_id));
        if(CollectionUtils.isNotEmpty(list)){
            if(StringUtils.isNotEmpty(id)){
                List<CourseSubLevel> collect = list.stream().filter(i -> !id.equals(i.getId())).collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(collect)){
                    return false;
                }else {
                    return true;
                }
            }
            return false;
        }else{
            return true;
        }
    }

    /**
     * 新增修改通用ID鉴别
     * @param dto
     * @return
     */
    public CourseSubLevelSaveOrUpdateDTO checkId(CourseSubLevelSaveOrUpdateDTO dto){
        if(StringUtils.isEmpty(dto.getId())){
            return dto;
        }
        CourseSubLevel courseSubLevel = getById(dto.getId());
        if(courseSubLevel!=null){
            return dto;
        }
        dto.setId(null);
        return dto;
    }

    /**
     * 获取code集合
     * @return
     */
    public List<String> getCodeList(){
        return list().stream().map(CourseSubLevel::getSubLevelCode).distinct().collect(Collectors.toList());
    }

    /**
     * 校验分阶与分类是否在同一系统下
     * @param classify
     * @param subLevel
     * @return 不存在返回false
     */
    public Boolean checkClassifyAndLevel(String classify,String subLevel){
        CourseSubLevel courseSubLevel = getById(subLevel);

        if(courseSubLevel==null){
            throw new BusinessException("不存在此分阶ID");
        }
        if (courseSubLevel.getClassifyId().equals(classify)) {
            return true;
        }
        return false;
    }

    /**
     * 根据name查询ID集合
     * @param name
     * @return
     */
    public List<String> queryIDListByName(String name){
        return list(new LambdaQueryWrapper<CourseSubLevel>().eq(CourseSubLevel::getSubLevelName,name))
                .stream()
                .map(CourseSubLevel::getId).collect(Collectors.toList());
    }
    /**
     * function：课程分阶（授课类型）下拉
     *
     * @param
     * @return CourseSubLevel 课程分阶实体
     * @author wangcx
     * @since 2022/7/29 16:21
     */
    public List<CourseSubLevel> getSub() {
        return this.mapper.selectList(null);
    }
}
